package org.example.scoresystem_backen.dto;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 成绩详情DTO
 * 包含成绩信息以及关联的学生、课程、班级信息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ScoreDetailDTO {

    // ========== 成绩信息 ==========
    /**
     * 成绩ID
     */
    private Integer id;

    /**
     * 成绩分数
     */
    private BigDecimal score;

    /**
     * 考试日期
     */
    private LocalDate examDate;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建时间
     */
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    private LocalDateTime updatedTime;

    // ========== 学生信息 ==========
    /**
     * 学生ID
     */
    private Integer studentId;

    /**
     * 学号
     */
    private String sno;

    /**
     * 学生姓名
     */
    private String studentName;

    // ========== 课程信息 ==========
    /**
     * 课程ID
     */
    private Integer courseId;

    /**
     * 课程代码
     */
    private String courseCode;

    /**
     * 课程名称
     */
    private String courseName;

    /**
     * 学分
     */
    private BigDecimal credits;

    // ========== 班级信息 ==========
    /**
     * 班级ID
     */
    private Integer classId;

    /**
     * 班级名称
     */
    private String className;

    /**
     * 年级
     */
    private String grade;

    /**
     * 获取完整的班级显示名称
     * @return 完整的班级显示名称
     */
    public String getFullClassName() {
        if (grade != null && className != null) {
            return grade + "级" + className;
        }
        return className;
    }

    /**
     * 获取完整的课程显示名称
     * @return 完整的课程显示名称
     */
    public String getFullCourseName() {
        if (courseCode != null && courseName != null) {
            return courseCode + "-" + courseName;
        }
        return courseName;
    }

    /**
     * 获取学生显示名称
     * @return 学生显示名称
     */
    public String getStudentDisplayName() {
        if (sno != null && studentName != null) {
            return sno + "-" + studentName;
        }
        return studentName;
    }
}
